package com.itfenghuang.day07;

public class A02_异常 {
    /*
     *  1.概述
     *      1).异常的体系结构
     *          Theowable是异常界的一哥
     *            Error : 错误   一旦发生错误,就会造成非常严重的后果     需要修改代码逻辑   内存溢出
     *            Exception : 异常   表示程序本身可以处理的
     *              分类:运行时异常,非运行时异常(编译期异常)
     *              运行时异常 : 编译期不会出现问题,运行期可能出现的异常.编译期不需要处理,
     *                      运行期可能需要处理  RuntimeException
     *                          例:索引越界(IndexOutofBoundsExceptio)   空指针异常(NullpointExceptio)
     *              编译期异常(非运行时异常) : 编译期会出现问题,不能够正确的编译成字节码文件 需要进行处理
     *                      除了RuntimeException及其子类之外的所有的异常类都是编译时异常
     *                          例:ParseException 使用简单日期格式化器解析日期型字符串的时候
     *              编译期异常和运行期异常的区别:
     *                      编译时异常:必须处理,不处理程序错误,无法通过编译
     *                      运行时异常:可以不显示处理,显示处理可以和编译时处理方式异常一样
     *   2.jvm默认处理异常的方式
     *          如果出现异常,并且程序员没有显示处理异常,那么jvm会做两件事
     *            1).停止执行异常的程序,哪里出现就会停在那里
     *            2).在控制台以红色字体d打印错误信息,出现的异常+哪一行出现的异常
     *   3.异常的处理方式   (重点)
     *      1).在方法上声明异常:(消极处理异常)   throw
     *              为什么要在方法上声明异常?
     *                  调用该方法有可能出现的异常
     *              出现例这个异常应该怎么解决
     *                  谁调用这个方法谁解决/交给该方法的调用者解决
     *              格式:修饰符  返回值类型 方法名 (参数) 异常类名{方法体}
     *          注: 1.编译时异常必须在方法上声明
     *              2.运行时异常,可以在方法上声明,也可以不声明
     *      2)try-catch:   (重中之重)
     *              (积极处理异常)
     *              1.格式: try{
     *                          有可能出现异常代码
     *                      }catch(可能会出现异常的类名 变量名){
     *                         出现异常后要执行的代码
     *                          }
     *              2.执行流程:
     *                  1).执行try中的代码,由上到下执行
     *                  2).如果try中的某一行代码出现了异常,会被catch捕捉,然后执行catch中的代码
     *                     try中后面的代码不会执行了
     *                  3).如果try中的代码没有出现异常,由上到下执行完try中的代码,继续往后执行其他代码
     *                      不会执行catch中的代码
     *              3.try-catch的好处:能够让程序继续运行下去
     *              4.如果有多个异常?
     *                  可以继续追加cacth
     * 4.throw
     *      手动抛出一个异常
     *        1).格式: throw new 异常类名();
     *        2).throw 和 throws的区别:
     *              throws:在方法上的声明异常,告诉调用者,你使用完有可能出现的异常  有可能抛出一个异常
     *              throw: 在方法体中,后面跟的是异常对象名,表示手动抛出一个异常    必定会抛出一个异常
     *        3).作用:
     *              需求:遍历数组
     *  5.Throwable中的方法
     *      toString()
     *      printStackTrace()  打印错误信息到控制台
     *      getMessage()   返回此throwable的详细字符串
     *  6.自定义异常
     *      当java中的异常不能够满足需求的时候就自定义一个异常类
     *      实现步骤:
     *          1).新建一个类,类名要做到标准,见名知意类名最后带一个Exception
     *          2).继承一个异常类
     *          3).提供空参构造与全参构造
     */
    public static void main(String[] args) {
        int[] arr={1,2,3,4};
        System.out.println(arr[0]);
        RuntimeException r = new RuntimeException("biubiubiu");

    }

}
//  6.自定义一个异常类
class AiException extends RuntimeException{
    public AiException() {
    }

    public AiException(String message) {
        super(message);
    }
}
